#include<bits/stdc++.h>
using namespace std;

int n,m,k;
vector<int> edges[1004];
bool exist[1004];
int a,b;
int sum[1004];
bool visit[1004];


int main(){
	cin>>k>>n>>m;
	memset(exist,false,sizeof(exist));
	int u=0;
	for(int i=0;i<k;i++){
		cin>>a;
		if(!exist[a]){
			exist[a]=true;
			u++;
		}
	}
	for(int i=0;i<m;i++){
		cin>>a>>b;
		edges[a].push_back(b);
	}
	memset(sum,0,sizeof(sum));
	queue<int> que;
	for(int i=1;i<=n;i++){
		if(exist[i]){
			memset(visit,false,sizeof(visit));
			que.push(i);
			visit[i]=true;
			sum[i]++;
			while(!que.empty()){
				int x=que.front();
				que.pop();
				for(auto j:edges[x]){
					if(!visit[j]){
						visit[j]=true;
						sum[j]++;
						que.push(j);
					}
				}
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(sum[i]==u) ans++;
	}
	cout<<ans;
	return 0;
}
